package QianFeng07.IODemo;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;
import java.io.StringWriter;

/**
 * 字符串流
 * <p>
 * 1、StringReader
 * 以一个字符串为数据源，来构造一个字符流
 * 作用：在Web开发中，我们经常要从服务器上获取数据，数据的返回格式通常是一个字符串（XML，JSON）
 * 我们要把这个字符串构造成一个字符流，然后在用第三方的数据解析器来解析数据
 * <p>
 * 2、StringWriter
 * 将字符写入StringWriter维护的缓存中
 * 一个字符流，可以用其回收在字符串缓冲区中的输出来构造字符串。关闭StringWriter无效。
 * 此类中的方法在关闭该流后仍可被调用，而不会产生任何l0Exception。
 **/
public class StringStreamDemo {
    public static void main(String[] args) {
        stringReader();
        stringWriter();
    }

    private static void stringReader() {
        String info = "good good study day day up";
        StringReader sr = new StringReader(info);
        //流标记器
        StreamTokenizer st = new StreamTokenizer(sr);

        int count = 0;
        //TT_EOF 一个常量，指示已读取流的末尾。
        while (st.ttype != StreamTokenizer.TT_EOF) {
            //下一个标记
            try {
                if (st.nextToken() == StreamTokenizer.TT_WORD) {
                    count++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        sr.close();
        System.out.println("count=" + count);
    }

    private static void stringWriter() {
        //内部维护缓存（string对象）
        StringWriter sw = new StringWriter();
        sw.append("go");
        sw.write("test");
        sw.write('中');
        try {
            sw.write("hello".toCharArray());
            sw.flush();
            //获取缓存中的内容
            System.out.println(sw.toString());
            //获取缓存中的内容，内容装在StringBuffer对像中缓存
            StringBuffer sb = sw.getBuffer();
            //获取StringBuffer中缓存中的内容
            System.out.println(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
